/*
 * Copyright (C) 2014 Jörg Prante
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.xbib.io.archive.cpio;

/**
 * All constants needed by CPIO.
 */
public interface CpioConstants {
    /**
     * magic number of a cpio entry in the new format
     */
    String MAGIC_NEW = "070701";

    /**
     * magic number of a cpio entry in the new format with crc
     */
    String MAGIC_NEW_CRC = "070702";

    /**
     * magic number of a cpio entry in the old ascii format
     */
    String MAGIC_OLD_ASCII = "070707";

    /**
     * magic number of a cpio entry in the old binary format
     */
    int MAGIC_OLD_BINARY = 070707;

    // These FORMAT_ constants are internal to the code

    /**
     * write/read a CPIOArchiveEntry in the new format
     */
    short FORMAT_NEW = 1;

    /**
     * write/read a CPIOArchiveEntry in the new format with crc
     */
    short FORMAT_NEW_CRC = 2;

    /**
     * write/read a CPIOArchiveEntry in the old ascii format
     */
    short FORMAT_OLD_ASCII = 4;

    /**
     * write/read a CPIOArchiveEntry in the old binary format
     */
    short FORMAT_OLD_BINARY = 8;

    /**
     * Mask for both new formats
     */
    short FORMAT_NEW_MASK = 3;

    /**
     * Mask for both old formats
     */
    short FORMAT_OLD_MASK = 12;

    /*
     * Constants for the MODE bits
     */

    /**
     * Mask for all file type bits.
     */
    int S_IFMT = 0170000;

    // http://www.opengroup.org/onlinepubs/9699919799/basedefs/cpio.h.html
    // has a list of the C_xxx constatnts

    /**
     * Defines a socket
     */
    int C_ISSOCK = 0140000;

    /**
     * Defines a symbolic link
     */
    int C_ISLNK = 0120000;

    /**
     * HP/UX network special (C_ISCTG)
     */
    int C_ISNWK = 0110000;

    /**
     * Defines a regular file
     */
    int C_ISREG = 0100000;

    /**
     * Defines a block device
     */
    int C_ISBLK = 0060000;

    /**
     * Defines a directory
     */
    int C_ISDIR = 0040000;

    /**
     * Defines a character device
     */
    int C_ISCHR = 0020000;

    /**
     * Defines a pipe
     */
    int C_ISFIFO = 0010000;


    /**
     * Set user ID
     */
    int C_ISUID = 0004000;

    /**
     * Set group ID
     */
    int C_ISGID = 0002000;

    /**
     * On directories, restricted deletion flag.
     */
    int C_ISVTX = 0001000;


    /**
     * Permits the owner of a file to read the file
     */
    int C_IRUSR = 0000400;

    /**
     * Permits the owner of a file to write to the file
     */
    int C_IWUSR = 0000200;

    /**
     * Permits the owner of a file to execute the file or to search the directory
     */
    int C_IXUSR = 0000100;


    /**
     * Permits a file's group to read the file
     */
    int C_IRGRP = 0000040;

    /**
     * Permits a file's group to write to the file
     */
    int C_IWGRP = 0000020;

    /**
     * Permits a file's group to execute the file or to search the directory
     */
    int C_IXGRP = 0000010;


    /**
     * Permits others to read the file
     */
    int C_IROTH = 0000004;

    /**
     * Permits others to write to the file
     */
    int C_IWOTH = 0000002;

    /**
     * Permits others to execute the file or to search the directory
     */
    int C_IXOTH = 0000001;

    /**
     * The special trailer marker
     */
    String CPIO_TRAILER = "TRAILER!!!";

    /**
     * The default block size.
     */
    int BLOCK_SIZE = 512;
}
